package LeetCode;

//给定单向链表的头指针和一个要删除的节点的值，定义一个函数删除该节点。
//
//返回删除后的链表的头节点。
public class TestOffer18 {
    public ListNode deleteNode(ListNode head, int val) {
        //递归处理
        if (head == null) {
            return null;
        }
        head.next = deleteNode(head.next, val);
        if (head.val == val) {
            return head.next;
        }
        return head;
        //头节点处理
//        while ((head != null) && (head.val == val)) {
//            ListNode temp = head;
//            head = head.next;
//            temp.next = null;
//        }
//        if (head == null) {
//            return null;
//        } else {
//            ListNode prev = head;
//            while (prev.next != null) {
//                if (prev.next.val == val) {
//                    ListNode cur = prev.next;
//                    prev.next = cur.next;
//                    cur.next = null;
//                } else {
//                    prev = prev.next;
//                }
//            }
//        }
//        return head;
        //虚拟头节点方法
//        ListNode dummyHead = new ListNode(-101);
//        dummyHead.next=head;
//        ListNode prev = dummyHead;
//        while (prev.next!=null){
//            if (prev.next.val==val){
//                prev.next=prev.next.next;
//            }else {
//                prev=prev.next;
//            }
//        }
//        return dummyHead.next;
    }
}
